package util;

import java.util.ArrayList;

import zemberek.core.io.Chars;
/**
 * harfler=a,b,c,ç,d,e,f,g,ğ,h,ı,i,j,k,l,m,n,o,ö,p,r,s,ş,t,u,ü,v,y,z,â,î,û,q,
 * w,x,.,-,'," 
 * sesli=a,e,ı,i,o,ö,u,ü 
 * ince-sesli=e,i,ö,ü 
 * kalin-sesli=a,ı,o,u
 * duz-sesli=a,e,ı,i 
 * yuvarlak-sesli=o,ö,u,ü 
 * sertSessiz=f,s,t,k,ç,ş,h,p
 * yumuşakSessiz=b,c,d,g,ğ,j,k,l,m,n,r,v,y,z
 */

public class HarfTr extends Chars {
	private String content;
	private int size;

	private static final String trHarfler = "abcçdefgğhıijklmnoöprsştuüvyz";
	private static final String yabanciHarfler = "wxq";

	private static final String sesliHarfler = "aeıioöuü";
	private static final String inceSesliHarfler = "eiöü";
	private static final String kalinSesliHarfler = "aıou";
	private static final String duzSesliHarfler = "aeıi";
	private static final String yuvarlakSesliHarfler = "oöuü";
	private static final String darSesliHarfler = "iıuü";
	private static final String genisSesliHarfler = "aeoö";


	private static final String sessizHarfler = "bcçdfgğhjklmnprsştvyz";
	private static final String yumusakSessizHarfler = "bcdgğjklmnrvyz";
	private static final String sertSessizHarfler = "fstkçşhp";

	private static final String sertSureksizSessizHarfler = "pçtk";
	private static final String yumusakSureksizSessizHarfler = "bcdgğ";

	private boolean sesli = false;
	private boolean inceSesli = false;
	private boolean kalinSesli = false;
	private boolean duzSesli = false;
	private boolean yuvarlakSesli = false;
	private boolean darSesli = false;
	private boolean genisSesli = false;

	private boolean sessiz = false;
	private boolean yumusakSessiz = false;
	private boolean sertSessiz = false;

	private boolean yumusakSureksizSessiz = false;
	private boolean sertSureksizSessiz = false;

	private boolean buyukHarf = false;

	private boolean yabanciHarf = false;

	public HarfTr(String content) {
		// TODO Auto-generated constructor stub
		setContent(content);

	}

	public static boolean isYumusakHarf(String str) {
		// TODO Auto-generated method stub
		for (int i = 0; i < str.length(); i++) {
			char aCharacter;
			aCharacter = str.charAt(i);
			for (int j = 0; j < yumusakSureksizSessizHarfler.length(); j++) {
				char bCharacter;
				bCharacter = yumusakSureksizSessizHarfler.charAt(j);
				if (aCharacter == bCharacter) {
					return true;
				}
			}
		}
		return false;
	}
	public String getContent() {
		return content;
	}
/** 
 * <pre> 
 * Harflerin kalın,ince,düz,yuvarlak,dar,genişliklerini set eder.
 * </pre>
 * @param str : harf
 */
	public void setContent(String str) {
		this.content = str;
		if (sesliHarfler.contains(str)) {
			setSesli(true);
			if (inceSesliHarfler.contains(str))
				setInceSesli(true);
			 if (kalinSesliHarfler.contains(str))
				setKalinSesli(true);
			if (duzSesliHarfler.contains(str))
				setDuzSesli(true);
			if (yuvarlakSesliHarfler.contains(str))
				setYuvarlakSesli(true);
			if (darSesliHarfler.contains(str))
				setDarSesli(true);
			if (genisSesliHarfler.contains(str))
				setGenisSesli(true);

		} else if (sessizHarfler.contains(str)) {
			setSessiz(true);
			if (yumusakSessizHarfler.contains(str))
				setYumusakSessiz(true);
			if (sertSessizHarfler.contains(str))
				setSertSessiz(true);
			if (yumusakSureksizSessizHarfler.contains(str))
				setYumusakSureksizSessiz(true);
			if (sertSureksizSessizHarfler.contains(str))
				setSertSureksizSessiz(true);
		} else if (yabanciHarfler.contains(str)) {
			setYabanciHarf(true);
		}
	}
	public void setContent(char ch) {
		this.content = Character.toString(ch);
		setContent(this.content);
	}
	public void setContent(HarfTr hrf) {
		
		this.content = hrf.getContent();
		setContent(this.content);
	}
	/**
	 * Reser  all the flags to the harf
	 * */
	public void resetContent() {	
		setSesli(false);
		setInceSesli(false);
		setKalinSesli(false);
		setDuzSesli(false);
		setYuvarlakSesli(false);
		setDarSesli(false);
		setGenisSesli(false);
		setSessiz(false);
		setYumusakSessiz(false);
		setSertSessiz(false);
		setYumusakSureksizSessiz(false);
		setSertSureksizSessiz(false);
		setYabanciHarf(false);
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	public HarfTr() {
		content = null;
		size = 0;
	}


	public HarfTr(char charAt) {
		// TODO Auto-generated constructor stub
		 
		this(Character.toString(charAt));
	}
	public boolean isSesli() {
		return sesli;
	}

	public void setSesli(boolean sesli) {
		this.sesli = sesli;
	}

	public boolean isInceSesli() {
		return inceSesli;
	}

	public void setInceSesli(boolean inceSesli) {
		this.inceSesli = inceSesli;
	}

	public boolean isKalinSesli() {
		return kalinSesli;
	}

	public void setKalinSesli(boolean kalinSesli) {
		this.kalinSesli = kalinSesli;
	}
/**
 * Düz sesli <code>"aeıi" </code> harf kotrolü yapar
 *  
 * */
	public boolean isDuzSesli() {
		return duzSesli;
	}

	public void setDuzSesli(boolean duzSesli) {
		this.duzSesli = duzSesli;
	}

	public boolean isYuvarlakSesli() {
		return yuvarlakSesli;
	}
	
	public void setYuvarlakSesli(boolean yuvarlakSesli) {
		this.yuvarlakSesli = yuvarlakSesli;
	}

	/**
	 * Dar sesli <code>"uüıi" </code> harf kotrolü yapar
	 *  
	 * */
	public boolean isDarSesli() {
		return darSesli;
	}
	
	public void setDarSesli(boolean darSesli) {
		this.darSesli = darSesli;
	}
	
	public boolean isGenisSesli() {
		return genisSesli;
	}
	
	public void setGenisSesli(boolean darSesli) {
		this.genisSesli = darSesli;
	}
	
		
	
	public boolean isSessiz() {
		return sessiz;
	}

	public void setSessiz(boolean sessiz) {
		this.sessiz = sessiz;
	}

	public boolean isYumusakSessiz() {
		return yumusakSessiz;
	}

	public void setYumusakSessiz(boolean yumusakSessiz) {
		this.yumusakSessiz = yumusakSessiz;
	}

	public boolean isSertSessiz() {
		return sertSessiz;
	}

	public void setSertSessiz(boolean sertSessiz) {
		this.sertSessiz = sertSessiz;
	}

	public boolean isYumusakSureksizSessiz() {
		return yumusakSureksizSessiz;
	}

	public void setYumusakSureksizSessiz(boolean yumusakSureksizSessiz) {
		this.yumusakSureksizSessiz = yumusakSureksizSessiz;
	}

	public boolean isSertSureksizSessiz() {
		return sertSureksizSessiz;
	}

	public void setSertSureksizSessiz(boolean sertSureksizSessiz) {
		this.sertSureksizSessiz = sertSureksizSessiz;
	}

	public boolean isYabanciHarf() {
		return yabanciHarf;
	}

	public void setYabanciHarf(boolean yabanciHarf) {
		this.yabanciHarf = yabanciHarf;
	}
/**
 * Dar sesli harfleri <code>ArrayList</code> olarak getirir.
 * dar Sesli Harfler = "iıuü";
 * */
	public static ArrayList<String> getDarSesliHarfler() {
		 ArrayList<String> darSesliHarfListe =new  ArrayList();
		for (int i=0; i<darSesliHarfler.length();i++){
			darSesliHarfListe.add(Character.toString(darSesliHarfler.charAt(i)));
		}
		return darSesliHarfListe;
	}
}
		

